home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.92 / crossfir / crossfire-0.92.5 / server / ban.c < prev    next >
C/C++ Source or Header  |  1996-07-24  |  3KB  |  89 lines

  1. /*
  2.  * static char *rcsid_ban_c =
  3.  *   "$Id: ban.c,v 1.1 1994/05/06 08:02:09 master Exp $";
  4.  */
  5.  
  6. /*
  7.  * Ban.c
  8.  * Code was grabbed from the netrek source and modified to work with 
  9.  * crossfire. This function checks a file in the lib directory for any
  10.  * banned players. If it finds one it returns a 1. Wildcards can be used.
  11.  */ 
  12.  
  13. #include <global.h>
  14. #include <sys/ioctl.h>
  15. #ifdef hpux
  16. #include <sys/ptyio.h>
  17. #endif
  18.  
  19. #include <errno.h>
  20. #include <stdio.h>
  21. #include <sys/file.h>
  22.  
  23. int checkbanned(char *login, char *host)
  24. {
  25.   FILE  *bannedfile;
  26.   char  buf[MAX_BUF];
  27.   char  log_buf[64], host_buf[64], line_buf[160];
  28.   char  *indexpos;
  29.   int           num1;
  30.   int   Hits=0;                 /* Hits==2 means we're banned */
  31.  
  32.   sprintf (buf, "%s/%s", LIBDIR, BANFILE);
  33.   if ((bannedfile = fopen(buf, "r")) == NULL) {
  34.     LOG (llevDebug, "Could not find file Banned file.\n");
  35.     return(0);
  36.   }
  37.   while(fgets(line_buf, 160, bannedfile) != NULL) {
  38.     /* Split line up */
  39.     if((*line_buf=='#')||(*line_buf=='\n'))
  40.       continue;
  41.     if ((indexpos = (char *) strrchr(line_buf, '@')) == 0) {
  42.       LOG (llevDebug, "Bad line in banned file\n");
  43.       continue;
  44.     }
  45.     num1 = indexpos - line_buf;
  46.     strncpy(log_buf, line_buf, num1); /* copy login name into log_buf */
  47.     log_buf[num1] = '\0';
  48.     strncpy(host_buf, indexpos + 1, 64); /* copy host name into host_buf */
  49.     /* Cut off any extra spaces on the host buffer */
  50.     indexpos = host_buf;
  51.     while (!isspace(*indexpos))
  52.       indexpos++;
  53.     *indexpos = '\0';
  54.  
  55.     /*
  56.       LOG (llevDebug, "Login: <%s>; host: <%s>\n", login, host);
  57.       LOG (llevDebug, "    Checking Banned <%s> and <%s>.\n",log_buf,host_buf);
  58.     */
  59.     if(*log_buf=='*')
  60.  
  61.       Hits=1;
  62.     else if (!strcmp(login, log_buf))
  63.       Hits=1;
  64.     if(Hits==1)
  65.       {
  66.         if (*host_buf == '*'){  /* Lock out any host */
  67.           Hits++;
  68.           break;                /* break out now. otherwise Hits will get reset
  69.                                    to one */
  70.         }
  71.         else if(strstr(host,host_buf)!=NULL){ /* Lock out subdomains (eg, "*@usc.edu" */
  72.           Hits++;
  73.           break;                /* break out now. otherwise Hits will get reset
  74.                                    to one */
  75.         }
  76.         else if (!strcmp(host, host_buf)){ /* Lock out specific host */
  77.           Hits++;
  78.           break;                /* break out now. otherwise Hits will get reset
  79.                                    to one */
  80.         }
  81.       }
  82.   }
  83.   fclose(bannedfile);
  84.   if(Hits>=2)
  85.     return(1);
  86.   else
  87.     return(0);
  88. }
  89.